package com.example.stock.service;

import com.example.stock.excel.Article;
import com.example.stock.util.DataUtil;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;

@Service
public class ArticleDataService {

    // tag 映射关系
    Map<String, String> tagMap = new HashMap<>(){
        {
            put("南方原油", "原油");
            put("有色金属", "有色");
        }
    };

    public List<Article> getArticleList() {
        return DataUtil.getArticleData();
    }

    /**
     * 文章按标签分类
     * @return
     */
    public Map<String, List<Article>> getArticleGroupByTag() {
        return getArticleList().stream().collect(Collectors.groupingBy(Article::getTag));
    }

    /**
     * 按文章来源分类
     * @return
     */
    public Map<String, List<Article>> getArticleListBySource() {
        return getArticleList().stream().collect(Collectors.groupingBy(Article::getSource));
    }

    /**
     * 最近的文章
     * @return
     */
    public List<Article> getLatestArticle() {
        return getArticleList().stream().sorted(Comparator.comparing(Article::getDate).reversed()).limit(250).toList();
    }

    private String formatTag(String rawTag) {
        return tagMap.getOrDefault(rawTag, rawTag);
    }

    /**
     * 根据标签获取文章列表
     * @param tag
     * @return
     */
    public List<Article> getTagArticle(String tag) {

        String searchText = formatTag(tag.replace("ETF",""));

        // 根据搜索文本获取文章列表
        List<Article> articles = getArticleGroupByTag().get(searchText);

        // 如果文章列表为空，则返回成功结果对象
        if(Objects.isNull(articles)) {
            return null;
        }

        // 对获取到的文章列表按照日期进行排序，并返回排序后的列表
        return articles.stream()
                .sorted(Comparator.comparing(Article::getDate).reversed())
                .collect(Collectors.toList());
    }
}
